// 引入express
const express = require('express');

// 创建应用对象
const app = express();

// 3. 创建路由规则
// request 是对请求报文的封装
// response 是对响应报文的封装
app.get('/server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 设置响应体
    response.send('HELLO AJAX');
});
// 可以接收任意类型的请求
app.all('/server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    // 设置响应体
    response.send('HELLO AJAX');
});
// JSON 响应
app.all('/json-server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    //响应一个数据
    const data = {
        name:'atgUiGu'
    };
    // 对对象进行字符串转换
    let str = JSON.stringify(data);
    // 设置响应体
    response.send(str);
});
// 针对 IE 缓存
app.get('/ie',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 设置响应体
    response.send('HELLO IE -2');
});
// 延时响应
app.get('/delay',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 设置延时定时器
    setTimeout(() => {
        // 设置响应体
        response.send('延时响应');
    },3000);
});

// JQuery 服务
app.all('/jquery-server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    const data = {name:'奥利给'};
    response.send(JSON.stringify(data));
});

// axios 服务
app.all('/axios-server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    const data = {name:'奥利给'};
    response.send(JSON.stringify(data));
});

// fetch 服务
app.all('/fetch-server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    const data = {name:'奥利给'};
    response.send(JSON.stringify(data));
});

// jsonp 服务
app.all('/jsonp-server',(request,response) => {
    // response.send('console.log("hello jsonp server")');
    const data = {
        name:'刘德华'
    };
    // 将数据转换为字符串
    let str = JSON.stringify(data);
    // 返回结果
    response.end(`handle(${str})`);
});

// 用户名检测是否存在
app.all('/check-username',(request,response) => {
    // response.send('console.log("hello jsonp server")');
    const data = {
        exist:1,
        msg:'用户名已存在'
    };
    // 将数据转换为字符串
    let str = JSON.stringify(data);
    // 返回结果
    response.end(`handle(${str})`);
});

// jquery-jsonp
app.all('/jquery-jsonp',(request,response) => {
    // response.send('console.log("hello jsonp server")');
    const data = {
        name:'奥利给',
        city:['北京','上海']
    };
    // 将数据转换为字符串
    let str = JSON.stringify(data);
    // 接收 callback 参数
    let cb = request.query.callback;
    // 返回结果
    response.end(`${cb}(${str})`);
});

// cors
app.all('/cors-server',(request,response) => {
    // 设置响应头 设置允许跨域
    response.setHeader('ACCESS-Control-Allow-Origin','*');
    // 响应头
    response.setHeader('ACCESS-Control-Allow-Headers','*');
    // 请求方法
    response.setHeader('ACCESS-Control-Allow-Method','*');

    response.send('hello CORS');
});

// 4. 监听端口启动服务
app.listen(8000,() => {
    console.log('服务已启动，8000 端口监听中.....');
});